package aop;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.slf4j.LoggerFactory;

public class TimeSpanAspect {
    private static final Logger log = (Logger) LoggerFactory.getLogger(TimeSpanAspect.class);
    public Object around(ProceedingJoinPoint jp) throws Throwable {
        log.info("【环绕增强-前置】记录{}方法执行的开始时间。");
        log.info(jp.getSignature().getName());
        long startTime = System.currentTimeMillis();
        try{
            Throwable result = (Throwable) jp.proceed();
            log.info("【环绕增强-后置】{}方法执行结果为{}。");
            log.info(jp.getSignature().getName(),result);
            return result;
        }catch (Throwable e){
            log.info("【环绕增强-异常抛出】{}方法执行异常信息为{}.");
            log.info(jp.getSignature().getName());
            log.info(e.getMessage());
            throw e;
        }finally {
            long endTime = System.currentTimeMillis();
            log.info("【环绕增强=最终】记录{}方法执行的结束时间，并计算耗时为{}ms.");
            log.info(jp.getSignature().getName());
            log.info(String.valueOf(endTime - startTime));
        }
    }
}
